FFMPEG 合并视频文件(无损) |
您所在的位置:网站首页 › ffmpeg 合并视频 › FFMPEG 合并视频文件(无损) |
FFMPEG 合并视频文件(无损)
前言
最近在做视频转码相关业务,但是片源商给了一些DVD的零散视频片段,需要自己去合并片段并进行业务转码,本篇文章主要记录视频合并的过程及常见的合并方式。 环境FFMPEG BUILDS 4.4.1 FFmpeg Builds GeForce GTX 1060(NVIDIA) 显卡支持列表 windows 10 OVB格式视频文件 VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB 视频合并方式 concat 分离器 新建 merge.txt file 'VTS_01_1.VOB' file 'VTS_01_2.VOB' file 'VTS_01_3.VOB' file 'VTS_01_4.VOB' file 'VTS_01_5.VOB' 复制代码 合并视频文件 ffmpeg -f concat -safe 0 -i merge.txt -c copy vts.mp4 复制代码PS:如果使用的是相对路径可以不加 -safe 0 文件列表生成技巧如果视频文件过多,merge.txt 复制很繁琐,所以可以使用命令来快速生成文件列表文件。 windows (for %i in (*.VOB) do @echo file '%i') > merge.txt 复制代码PS:*.VOB 代表视频文件后缀。 linux # bash for f in *.wav; do echo "file '$f'" >> merge.txt; done # printf printf "file '%s'\n" *.wav > merge.txt 复制代码 concat 协议 缺点这种方式使用范围比较小,只适合MPEG等视频格式; 合并视频 ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy merge.ts 复制代码 拓展如果是其他格式文件,则可以先转码在合并,例如 ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4 复制代码PS:-movflags +faststart 使用这两个属性生成的文件可以边下边看。 concat 过滤器(有损) 说明过滤器适用于同步视频和音频流的段。所有段都必须具有相同数量的每种类型的流,并且也将是输出时的流数。 合并视频 ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \ -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" \ -map "[outv]" -map "[outa]" output.mkv 复制代码PS:输入流有三个,分别是input1.mp4 、 input2.webm 和 input3.mov ,然后告诉ffmpeg取出视频中的视频流及音频流,使用concat过滤器,告知它有三个视频流,他们都分别有一个视频流及一个音频流,连接并产生新的视频流[outv]及音频流[outa],然后映射新的视频流及音频流到新的文件 output.mkv。 总结以上就是使用FFMPEG合并视频的方式及过程,各种方式各有利弊,推荐 concat分离器 > concat协议 > concat过滤器 ,不能说哪种方式最好,只能根据实际情况来选择,如果大家有更好的方式或者建议,欢迎讨论。 \ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |